﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class ValoresVaga : PageHelper
    {
        private static List<Beneficio> BeneficiosSelecionados { get; set; }

        protected override void OnLoadComplete(EventArgs e)
        {
            base.OnLoadComplete(e);

            PreencherBeneficiosSelecionados();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            portalValores.IdVaga = ParseIdQueryString();
        }

        private void PreencherBeneficiosSelecionados()
        {
            BeneficiosSelecionados = new List<Beneficio>();

            foreach (ListViewDataItem item in portalValores.lsvBeneficio.Items)
            {
                var checkSelecionado = (CheckBox) item.FindControl("chkSelecionado");
                int id = int.Parse(checkSelecionado.Attributes["Id"]);

                if (!checkSelecionado.Checked) continue;

                BeneficiosSelecionados.Add(new Beneficio {Id = id});
            }
        }

        protected void lnkSalvar_Click(object sender, EventArgs e)
        {
            int idVaga = SalvarValores();
            SalvarBeneficios(idVaga);

            Response.Redirect(string.Concat("VisualizarVaga.aspx?Id=", idVaga));
        }

        private int SalvarValores()
        {
            Vaga vaga = new Vaga {Id = ParseIdQueryString()}.Selecionar();

            vaga.IdFormaContratacao = int.Parse(portalValores.ddlFormaContratacao.SelectedValue);
            vaga.Valor = string.IsNullOrEmpty(portalValores.txtValor.Text)
                             ? (decimal?) null
                             : Decimal.Parse(portalValores.txtValor.Text);
            vaga.ValorMinimo = string.IsNullOrEmpty(portalValores.txtValorDe.Text)
                                   ? (decimal?) null
                                   : Decimal.Parse(portalValores.txtValorDe.Text);
            vaga.ValorMaximo = string.IsNullOrEmpty(portalValores.txtValorAte.Text)
                                   ? (decimal?) null
                                   : Decimal.Parse(portalValores.txtValorAte.Text);
            vaga.Save();

            return vaga.Id;
        }

        private void SalvarBeneficios(int idVaga)
        {
            foreach (ListViewDataItem item in portalValores.lsvBeneficio.Items)
            {
                var checkSelecionado = (CheckBox) item.FindControl("chkSelecionado");
                int id = int.Parse(checkSelecionado.Attributes["Id"]);

                bool existe = (from beneficio in BeneficiosSelecionados
                               where beneficio.Id.Equals(id)
                               select true).FirstOrDefault();

                if (checkSelecionado.Checked)
                {
                    if (existe) continue;
                    new VagaBeneficio { IdBeneficio = id, IdVaga = idVaga }.Save();
                }
                else
                {
                    if (!existe) continue;
                    new VagaBeneficio { IdVaga = idVaga, IdBeneficio = id}.SelecionarPorVagaEBeneficio().Delete();
                }
            }
        }
    }
}